[Chapter 1] 1.7 The Envelope
Author: Bryan Costales & Eric Allman
Date: 1999-01-06T18:32:18Z

#

| Chapter 1 Introduction |

## 1.7 The Envelope

To handle delivery to diverse recipients, the sendmail program uses the concept of an envelope. This envelope is analogous to the physical envelopes that are used for post office mail. Imagine that you want to send two copies of a document: one to your friend in the office next to yours and one to a friend across the country:

>     To: friend1, friend2@remote

After you photocopy the document, you stuff each copy into a separate envelope. You hand one envelope to a clerk, who carries it next door and hands it to `friend1` in the next office. This is like delivery on your local machine. The clerk drops the other copy in the slot at the corner mailbox, and the post office forwards that envelope across the country to `friend2@remote`. This is like sendmail transporting a mail message to a remote machine.

To illustrate what an envelope is, consider one way in which sendmail might run /bin/mail, a program that performs local delivery:

>               deliver to friend1's mailbox

>     /bin/mail -d friend1          sendmail runs

>                     the envelope recipient

Here sendmail runs /bin/mail with a `-d`, which tells /bin/mail to append the mail message to friend1's mailbox.

Information that describes the sender or recipient, but is not part of the message header, is considered envelope information. The two may or may not contain the same information (a point we'll gloss over for now). In the case of /bin/mail, the email message showed two recipients in its header:

>     To: friend1, friend2@remote         the header

But the envelope information that is given to /bin/mail showed only one (the one appropriate to local delivery):

>     -d friend1                     specifies the envelope

Now consider the envelope of a message transported over the network. When sending network mail, sendmail must give the remote site a list of sender and recipients separate from and before it sends the mail message (header and body). Figure 1.2 shows this in a greatly simplified conversation between the local sendmail and the remote machine's sendmail.

#### Figure 1.2: A simplified conversation

The local sendmail tells the remote machine's sendmail that there is mail from you (the `sender`) and for `friend2@remote`. It conveys this sender and recipient information separate from and before it transmits the mail message that contains the header. Because this information is conveyed separately from the message header, it is called the envelope.

There is only one recipient listed in the envelope, whereas two were listed in the message header:

>     To: friend1, friend2@remote

The remote machine does not need to know about the local user, `friend1`, so that bit of recipient information is excluded from the envelope.

A given mail message can be sent by using many different envelopes (like the two here), but the header will be common to them all.

1.6 The Body |  | 1.8 Things to Try